package com.parkingspace.util;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

/**
 * ClassName: CodeGenerator
 * Package: com.parkingspace.util
 *
 * @author: guanzepeng
 * @Date: 2021/5/24 18:43 星期一
 * @Description:
 */
public class CodeGenerator {

	public static void main(String[] args) {
		// 1. 创建代码生成器
		AutoGenerator generator = new AutoGenerator();
		// 2. 全局配置
		GlobalConfig globalConfig = new GlobalConfig();
		String projectPath = System.getProperty("user.dir");
		globalConfig.setOutputDir(projectPath + "/src/main/java");
		globalConfig.setAuthor("Gapper");
		globalConfig.setOpen(false);                    // 生成后是否打开资源管理器
		globalConfig.setFileOverride(false);            // 重新生成文件时，是否覆盖旧文件
		// globalConfig.setServiceName("%sService");    // 去掉Service接口的首字母"I"
		globalConfig.setIdType(IdType.ASSIGN_ID);       // 设置主键生成策略
		globalConfig.setDateType(DateType.ONLY_DATE);   // 定义生成的实体类中日期的类型
		globalConfig.setSwagger2(false);                // 开启Swagger2模式
		generator.setGlobalConfig(globalConfig);
		// 3. 配置数据源
		DataSourceConfig dsc = new DataSourceConfig();
		dsc.setUrl("jdbc:mysql://rm-bp11u8ck995qvu316eo.mysql.rds.aliyuncs.com:3306/e_parking_space?serverTimezone=GMT%2B8");
		dsc.setDriverName("com.mysql.cj.jdbc.Driver");
		dsc.setUsername("root");
		dsc.setPassword("GLH15536799176p!");
		dsc.setDbType(DbType.MYSQL);
		generator.setDataSource(dsc);
		// 4. 包配置
		PackageConfig pc = new PackageConfig();
		pc.setParent("com.parkingspace");
//		 pc.setModuleName("e_common");                              // 设置模块名
		pc.setController("controller");
		pc.setEntity("entity");
		pc.setService("service");
		pc.setMapper("dao");                                 // 设置Mapper接口的位置
		pc.setXml("dao");                                    // 设置Mapper.xml的位置
		generator.setPackageInfo(pc);
		// 5. 策略配置
		StrategyConfig sc = new StrategyConfig();
//		sc.setInclude("user","car","complain","log","order","parking_information","permission","person_wallet","property","property_between_user","role","rolepermission","userrole","wallet_user");                                  // 指定表名
		sc.setInclude("appraise");
		sc.setNaming(NamingStrategy.underline_to_camel);        // 数据库表映射到实体的命名策略
		sc.setTablePrefix(pc.getModuleName() + "_");
		sc.setColumnNaming(NamingStrategy.underline_to_camel);  // 数据库表字段映射到实体的命名策略
		sc.setEntityLombokModel(true);
		sc.setRestControllerStyle(true);                        // restful api风格控制器
		sc.setControllerMappingHyphenStyle(true);               // url中驼峰转连字符
		generator.setStrategy(sc);

		// 6. 执行
		generator.execute();
	}
}
